package com.example.batch.example;

import org.springframework.batch.item.ItemProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 用户批处理器
 * 负责处理从输入读取的用户数据
 */
public class UserBatchProcessor implements ItemProcessor<User, ProcessedUser> {

    // 日志记录器，用于记录处理过程中的信息
    private static final Logger log = LoggerFactory.getLogger(UserBatchProcessor.class);

    /**
     * 处理用户数据
     * @param user 输入的用户数据
     * @return 处理后的用户数据
     * @throws Exception 如果处理过程中发生错误
     */
    @Override
    public ProcessedUser process(final User user) throws Exception {
        // 将用户数据转换为处理后的用户数据
        final String firstName = user.getFirstName().toUpperCase();
        final String lastName = user.getLastName().toUpperCase();

        // 创建一个新的ProcessedUser对象
        final ProcessedUser transformedUser = new ProcessedUser(firstName, lastName);

        // 记录转换后的用户信息
        log.info("Converting (" + user + ") into (" + transformedUser + ")");

        // 返回处理后的用户数据
        return transformedUser;
    }
}

/**
 * 用户类，表示输入的用户数据
 */
class User {
    private String firstName;
    private String lastName;

    // 获取用户的名字
    public String getFirstName() {
        return firstName;
    }

    // 设置用户的名字
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    // 获取用户的姓氏
    public String getLastName() {
        return lastName;
    }

    // 设置用户的姓氏
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "User{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                '}';
    }
}

/**
 * 处理后的用户类，表示输出的用户数据
 */
class ProcessedUser {
    private String firstName;
    private String lastName;

    // 构造函数，初始化处理后的用户数据
    public ProcessedUser(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // 获取处理后的用户的名字
    public String getFirstName() {
        return firstName;
    }

    // 获取处理后的用户的姓氏
    public String getLastName() {
        return lastName;
    }

    @Override
    public String toString() {
        return "ProcessedUser{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                '}';
    }
} 